package org.example.study1;
// 多线程并发执行
public class Demo02_Thread {
    public static void main(String[] args) {
        // 初始化自定义线程
        MyThread02 myThread02 = new MyThread02();
        // 启动线程，创建PCB，参与CPU调度
        myThread02.start();

        // 主线程任务（与子线程并发执行）
        while (true) {
            try {
                // 让线程休眠一会
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("hello main thread...");
        }
    }
}


// 自定义线程类（继承方式）
class MyThread02 extends Thread {

    /**
     * 线程执行体（JVM自动调度执行）
     * 典型特征：
     * 1. 独立于主线程运行
     * 2. 共享进程内存空间
     * 3. 拥有独立程序计数器（PC）
     */
    @Override
    public void run() {
        // 线程任务逻辑（与主线程并行）
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("hello my thread...");
        }
    }
}


/*线程的执行顺序并没有什么规律，这个和CPU调度有关
由于CPU调度是“抢占式”执行的，所以哪个线程当前占用CPU资源是不确定的
*/
/*所以输出无规律：
hello my thread...
hello main thread...
hello my thread...
hello main thread...
hello main thread...
hello my thread...
hello main thread...
......
* */